import axios from 'axios';
import qs from 'qs';
import { Message } from 'element-ui';
import store from '@/store'
import { console } from "vuedraggable/src/util/helper";
import router from "vue-router";
import adminApi from './../util/common.js';

axios.defaults.timeout = 200000;
axios.defaults.baseURL = adminApi.admin_api;
// axios.defaults.withCredentials = true;

const codeMessage = {
    100: '未登录',
    200: '服务器成功返回请求的数据。',
    201: '新建或修改数据成功。',
    202: '一个请求已经进入后台排队（异步任务）。',
    204: '删除数据成功。',
    400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
    401: '用户没有权限（令牌、用户名、密码错误）。',
    403: '用户得到授权，但是访问是被禁止的。',
    404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
    406: '请求的格式不可得。',
    410: '请求的资源被永久删除，且不会再得到的。',
    422: '当创建一个对象时，发生一个验证错误。',
    500: '服务器发生错误，请检查服务器。',
    502: '网关错误。',
    503: '服务不可用，服务器暂时过载或维护。',
    504: '网关超时。',
}

//POST传参序列化
axios.interceptors.request.use((config) => {
    // 处理请求之前的配置
    const token = sessionStorage.getItem('access-token');
    var is_login = config.url.indexOf('login') == -1 ? false : true;
    if (!is_login) {
        // 添加token到headers
        if (token) {
            config.headers.Authorization = 'Bearer ' + token;
        }
    }
    return config;
}, (error) => {
    Message({
        message: '参数错误',
        type: 'warning'
    });
    return Promise.reject(error);
});

axios.interceptors.response.use(res => {
    if (res.status == 200) {
        return res;
    } else {
        return Promise.reject(res);
    }
}, error => {
    if (error === undefined || error.code === 'ECONNABORTED') {
        message.warning('服务请求超时')
        return Promise.reject(error)
    }
    const { response: { status, statusText, data: { msg = '服务器发生错误' } } } = error
    const { response } = error
    const { dispatch } = store
    const text = codeMessage[status] || statusText || msg;
    if (response.data.indexOf("未登录") != -1) {
        localStorage.clear();
        window.location.href = "http://open.lemonicloud.com/manage/#/";
    }
    return Promise.reject(error);
});


export function post(url, params) {

    return axios.post(url, params)
        .then(response => {

            switch (response.data.code) {
                case 200:
                    return response.data.data;
                case 400:  //400 为提示类型错误
                    Message({
                        message: response.data.msg,
                        type: 'warning'
                    });
                    return Promise.reject(response.data.msg || 'error');
                case 500:
                    break;
                default:
                    return Promise.reject(response.data.msg || 'error');
            }
        })
        .catch((msg) => {
            return Promise.reject(msg || 'error')
        });

}
